#include <iostream>
#include <fstream>
#include <string>
#include "sup_h/bundle.h"

using namespace std;

int main(int argc, char* argv[]){

    // //压缩
    // if(argc<3){
    //     cout << "argv[1]：原始文件" << endl;
    //     cout << "argv[2]：压缩包名称" << endl;
    //     return -1;
    // }

    // string ifile = argv[1];
    // string ofile = argv[2];

    
    // //1、打开文件，读取文件内容
    // ifstream ifs;
    // ifs.open(ifile, ios::binary);
    // //跳转到文件末尾
    // ifs.seekg(0, ios::end);
    // //获取当前读取位置和文件起始位置之间的偏移量 -- 计算数据长度
    // size_t fsize = ifs.tellg();
    // ifs.seekg(0, ios::beg);
    // string body;
    // body.resize(fsize);
    // //body.c_str()是const，无法传给read，通过访问首地址来传给read
    // ifs.read(&body[0],fsize);

    // //2、进行压缩
    // string packed = bundle::pack(bundle::LZIP, body);
    
    // //3、将压缩后的数据用输出文件流写入到指定文件
    // ofstream ofs;
    // ofs.open(ofile, ios::binary);
    // ofs.write(&packed[0], packed.size());

    // ifs.close();
    // ofs.close();


    //解压
    if(argc<3){
        cout << "argv[1]：压缩包名称" << endl;
        cout << "argv[2]：解压后文件名称" << endl;
        return -1;
    }

    string ifile = argv[1];
    string ofile = argv[2];

    //1、打开压缩包文件，读取内容
    ifstream ifs;
    ifs.open(ifile, ios::binary);
    ifs.seekg(0, ios::end);
    size_t fsize = ifs.tellg();
    ifs.seekg(0, ios::beg);
    string body;
    body.resize(fsize);
    ifs.read(&body[0], fsize);
    ifs.close();

    //2、解压
    string unpacked = bundle::unpack(body);

    //3、将解压后的数据写入到指定文件
    ofstream ofs;
    ofs.open(ofile, ios::binary);
    ofs.write(&unpacked[0], unpacked.size());
    ofs.close();

    return 0;
}


